#include "Test_1.h"
#include "YccUnit.h"
using namespace BWAPI;

bool analyzed;
bool analysis_just_finished;
BWTA::Region* home;
BWTA::Region* enemy_base;

//DWORD WINAPI AnalyzeThread()
//{
//	BWTA::analyze();
//
//	//self start location only available if the map has base locations
//	if (BWTA::getStartLocation(BWAPI::Broodwar->self())!=NULL)
//	{
//		home       = BWTA::getStartLocation(BWAPI::Broodwar->self())->getRegion();
//	}
//	//enemy start location only available if Complete Map Information is enabled.
//	if (BWTA::getStartLocation(BWAPI::Broodwar->enemy())!=NULL)
//	{
//		enemy_base = BWTA::getStartLocation(BWAPI::Broodwar->enemy())->getRegion();
//	}
//	analyzed   = true;
//	analysis_just_finished = true;
//	return 0;
//}
//
//void ExampleAIModule::drawStats()
//{
//	std::set<Unit*> myUnits = Broodwar->self()->getUnits();
//	Broodwar->drawTextScreen(5,0,"I have %d units:",myUnits.size());
//	std::map<UnitType, int> unitTypeCounts;
//	for(std::set<Unit*>::iterator i=myUnits.begin();i!=myUnits.end();i++)
//	{
//		if (unitTypeCounts.find((*i)->getType())==unitTypeCounts.end())
//		{
//			unitTypeCounts.insert(std::make_pair((*i)->getType(),0));
//		}
//		unitTypeCounts.find((*i)->getType())->second++;
//	}
//	int line=1;
//	for(std::map<UnitType,int>::iterator i=unitTypeCounts.begin();i!=unitTypeCounts.end();i++)
//	{
//		Broodwar->drawTextScreen(5,16*line,"- %d %ss",(*i).second, (*i).first.getName().c_str());
//		line++;
//	}
//}
//
//void ExampleAIModule::drawBullets()
//{
//	std::set<Bullet*> bullets = Broodwar->getBullets();
//	for(std::set<Bullet*>::iterator i=bullets.begin();i!=bullets.end();i++)
//	{
//		Position p=(*i)->getPosition();
//		double velocityX = (*i)->getVelocityX();
//		double velocityY = (*i)->getVelocityY();
//		if ((*i)->getPlayer()==Broodwar->self())
//		{
//			Broodwar->drawLineMap(p.x(),p.y(),p.x()+(int)velocityX,p.y()+(int)velocityY,Colors::Green);
//			Broodwar->drawTextMap(p.x(),p.y(),"\x07%s",(*i)->getType().getName().c_str());
//		}
//		else
//		{
//			Broodwar->drawLineMap(p.x(),p.y(),p.x()+(int)velocityX,p.y()+(int)velocityY,Colors::Red);
//			Broodwar->drawTextMap(p.x(),p.y(),"\x06%s",(*i)->getType().getName().c_str());
//		}
//	}
//}
//
//void ExampleAIModule::drawVisibilityData()
//{
//	for(int x=0;x<Broodwar->mapWidth();x++)
//	{
//		for(int y=0;y<Broodwar->mapHeight();y++)
//		{
//			if (Broodwar->isExplored(x,y))
//			{
//				if (Broodwar->isVisible(x,y))
//					Broodwar->drawDotMap(x*32+16,y*32+16,Colors::Green);
//				else
//					Broodwar->drawDotMap(x*32+16,y*32+16,Colors::Blue);
//			}
//			else
//				Broodwar->drawDotMap(x*32+16,y*32+16,Colors::Red);
//		}
//	}
//}
//
//void ExampleAIModule::drawTerrainData()
//{
//	//we will iterate through all the base locations, and draw their outlines.
//	for(std::set<BWTA::BaseLocation*>::const_iterator i=BWTA::getBaseLocations().begin();i!=BWTA::getBaseLocations().end();i++)
//	{
//		TilePosition p=(*i)->getTilePosition();
//		Position c=(*i)->getPosition();
//
//		//draw outline of center location
//		Broodwar->drawBox(CoordinateType::Map,p.x()*32,p.y()*32,p.x()*32+4*32,p.y()*32+3*32,Colors::Blue,false);
//
//		//draw a circle at each mineral patch
//		for(std::set<BWAPI::Unit*>::const_iterator j=(*i)->getStaticMinerals().begin();j!=(*i)->getStaticMinerals().end();j++)
//		{
//			Position q=(*j)->getInitialPosition();
//			Broodwar->drawCircle(CoordinateType::Map,q.x(),q.y(),30,Colors::Cyan,false);
//		}
//
//		//draw the outlines of vespene geysers
//		for(std::set<BWAPI::Unit*>::const_iterator j=(*i)->getGeysers().begin();j!=(*i)->getGeysers().end();j++)
//		{
//			TilePosition q=(*j)->getInitialTilePosition();
//			Broodwar->drawBox(CoordinateType::Map,q.x()*32,q.y()*32,q.x()*32+4*32,q.y()*32+2*32,Colors::Orange,false);
//		}
//
//		//if this is an island expansion, draw a yellow circle around the base location
//		if ((*i)->isIsland())
//			Broodwar->drawCircle(CoordinateType::Map,c.x(),c.y(),80,Colors::Yellow,false);
//	}
//
//	//we will iterate through all the regions and draw the polygon outline of it in green.
//	for(std::set<BWTA::Region*>::const_iterator r=BWTA::getRegions().begin();r!=BWTA::getRegions().end();r++)
//	{
//		BWTA::Polygon p=(*r)->getPolygon();
//		for(int j=0;j<(int)p.size();j++)
//		{
//			Position point1=p[j];
//			Position point2=p[(j+1) % p.size()];
//			Broodwar->drawLine(CoordinateType::Map,point1.x(),point1.y(),point2.x(),point2.y(),Colors::Green);
//		}
//	}
//
//	//we will visualize the chokepoints with red lines
//	for(std::set<BWTA::Region*>::const_iterator r=BWTA::getRegions().begin();r!=BWTA::getRegions().end();r++)
//	{
//		for(std::set<BWTA::Chokepoint*>::const_iterator c=(*r)->getChokepoints().begin();c!=(*r)->getChokepoints().end();c++)
//		{
//			Position point1=(*c)->getSides().first;
//			Position point2=(*c)->getSides().second;
//			Broodwar->drawLine(CoordinateType::Map,point1.x(),point1.y(),point2.x(),point2.y(),Colors::Red);
//		}
//	}
//}
//
//void ExampleAIModule::showPlayers()
//{
//	std::set<Player*> players=Broodwar->getPlayers();
//	for(std::set<Player*>::iterator i=players.begin();i!=players.end();i++)
//	{
//		Broodwar->printf("Player [%d]: %s is in force: %s",(*i)->getID(),(*i)->getName().c_str(), (*i)->getForce()->getName().c_str());
//	}
//}
//
//void ExampleAIModule::showForces()
//{
//	std::set<Force*> forces=Broodwar->getForces();
//	for(std::set<Force*>::iterator i=forces.begin();i!=forces.end();i++)
//	{
//		std::set<Player*> players=(*i)->getPlayers();
//		Broodwar->printf("Force %s has the following players:",(*i)->getName().c_str());
//		for(std::set<Player*>::iterator j=players.begin();j!=players.end();j++)
//		{
//			Broodwar->printf("  - Player [%d]: %s",(*j)->getID(),(*j)->getName().c_str());
//		}
//	}
//}
//
